iT邦幫忙

2023 iThome 鐵人賽

DAY 3
1
AI & Data

Rust 加 MLOps,你說有沒有搞頭?系列 第 3

[Day 03] - 從 Python 🐍 到 Rust 🦀|上工啦!安裝、環境與函式庫相依管理

  • 分享至 

  • xImage
  •  

今日份 Ferris

雖然才第三天,但我發現可愛又切題的 Ferris 真的不好找,腦中瞬間出現 Panik 慌章迷因,還好找到了這張不要慌張的貼紙,趕快貼在頭上開始今天的內容吧。
順帶一提,下面這個爆炸小朋友叫做 Corro the Unsafe Rusturchin,用來代表不安全模式的 Rust:
https://ithelp.ithome.com.tw/upload/images/20231012/20141304ZDvaP6m0vh.jpg
*Designed and sold by out-in-space

Rust 中的 "panic" 是一種執行時錯誤處理機制,它表示程式在執行過程中遇到了無法處理的錯誤或不合法的狀態,導致程式無法繼續正常執行。當一個 panic 發生時,Rust 會執行一系列的操作,包括展開呼叫堆疊(unwinding the call stack)並終止程式的執行。這個過程通常會導致程式崩潰,但 Rust 的設計目標是盡量在 panic 時提供更多的安全性和可預測性。

報到上工啦! — 安裝與虛擬環境

接下來的幾天,每天會以一個工作時會遇到的情境作為主題,比較 Rust 跟 Python 在此情境的差異,而在這個階段的尾聲會得到一個基本的 GitHub 模板,之後每次就可以用它開啟新的專案。

今天的情境是報到完,拿到新的電腦,要來設定一下工作環境了,這邊為了說明方便,就假設使用的是 Unix 或 Unix-like 作業系統,首先來看看要讓 Python 可以開始進行開發會遇到什麼情況。

安裝 Python 與建立環境

我們沒有真的要安裝 Python,但有經驗的人應該都聽過不只一種安裝方法,而每種都好像沒那麼直覺,甚至連 Wikimedia Foundation (負責營運維基百科) 的機器學習總監 Chris Albon 都搞不懂:
https://ithelp.ithome.com.tw/upload/images/20230918/20141304gZXInxJJEh.png
*X (former Twitter) by Santiago Víquez
安裝好 Python 之後,虛擬環境又是一團手忙腳亂,光是常用的 Conda 就有 Anaconda, Miniconda, Miniforge 三種常見的選擇,走了這條路又要想想函式庫要用 conda install 還是 pip install 安裝 (P.S. 使用 python -m pip install 比直接使用 pip install 還好,詳細請參考 Why you should use python -m pip)。
假設我們單純一點使用標準函式庫的 venv,一般會搭配 requirements.txt 來管理函式庫,但維護更新 requirements.txt 卻是一件麻煩事,如果函式庫還依照用途進一步分成了開發跟產品化兩種,我們可能還需要有另一個 requirements-dev.txt 來區分兩個不同環境的函式庫,手動維護起來絕對會瘋掉。
這時候聰明的小朋友就會問了,那我用官方推薦的 Pipenv 呢?
可是上次在網路上看人家說 Poetry 也很讚,是不是真的會瘋掉 (這部分詳細請參考 2021年了,該如何配置 Python 開發環境 - Part 2 Python 套件管理)。
https://ithelp.ithome.com.tw/upload/images/20230918/20141304QaxUaleZgw.png
好啦,這部分搞定之後,還要設定 black 來修正程式碼風格問題、flake8 檢查其他有的沒的問題,再嚴謹一點用 mypy 做一下靜態型別檢查看看型別註解有沒有寫對,最後再來個 darglint 來檢查 docstring 問題 (啊對了,它在 2022/12/16 已經宣佈不再維護,但 Ruff 打算實作其規則,所以這裡改用 Ruff。),然後再把這些有的沒的放進 pre-commit 省得麻煩 (延伸閱讀:提升程式碼品質:使用 Pre-Commit (Git Hooks))。
經過幾次迷你精神崩潰,把上面都搞定之後,我們再來想想要用 Pytest 還是 Unittest 做測試吧!
上面的例子雖然比較誇大,有許多工具可用也未嘗不是件好事,但這些瑣碎的事情加起來就是滿費工的。
這時候看到 Rust 的情境就可以感覺到其中的天差地別!

安裝 Rust 與建立環境

在使用 rustup 安裝 Rust,詳細步驟如下:

  1. 上面的超連結點進去
  2. 複製中間那一行指令
  3. 到終端機執行
    https://ithelp.ithome.com.tw/upload/images/20230918/20141304zkAsloMWux.png

沒了,跟把大象裝進冰箱一樣簡單三步驟,唯一的差別在於 Rust 真的這樣就安裝好了!
噢對,還有函式庫要怎麼管理?
這部分也超級簡單,不需要安裝新的東西,要建立新的專案只需要在終端機執行 cargo new <project_name> 就會自動生成以下資料夾結構:
https://ithelp.ithome.com.tw/upload/images/20230918/20141304LxAiqhw4l8.png
其中 target/debug/ 資料夾中與專案名稱相同的檔案就是編譯好的可執行檔 (要至少執行過一次 cargo build 才有)。
而每個新建的資料夾就是自己的小天地,不用再擔心虛擬環境怎麼用,函式庫管理也只需要在 cargo.toml 中管理即可,例如:

[package]
name = "hello-world"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
polars = "0.33.2"

老實說,剛剛三個步驟也把 linter, formatter, packaging tool, documentation tools 都好了,甚至連 .bashrc (假設用 bash 啦,用 zsh 也一樣會搞定 .zshenv) 都設定好了!

是不是差很多,這樣就搞定了,剩下的時間就可以安裝一些 IDE 的延伸模組,選一些漂亮的佈景主題了 (推薦 Lunar Pink,很漂釀)。

Bonus — Visual Studio Code 延伸模組推薦

  • rust-analyzer - 提供程式碼智能提示、重構、語法檢查等功能,有助於更輕鬆地開發 Rust 程式。
    https://ithelp.ithome.com.tw/upload/images/20230918/20141304Ob6RgsoZCt.png
  • CodeLLDB - 幫助你在 VScode 中進行高效的程式碼除錯,查看變數、堆棧跟蹤等。
    https://ithelp.ithome.com.tw/upload/images/20230918/20141304U4L4CYyGZA.png
  • Even Better TOML - 提供 TOML 文件語法高亮和編輯支援,使得編輯 cargo.toml 更加輕鬆。
    https://ithelp.ithome.com.tw/upload/images/20230918/20141304GftRXvnqAK.png
  • crates - 允許你在 VScode 中輕鬆搜索和查看 Rust 庫(也稱為 crates)的資訊,讓我們可以選擇最新或正確的版本。
    https://ithelp.ithome.com.tw/upload/images/20230918/20141304yVTpJEXIPX.png
  • Error Lens - 直接將錯誤信息直接顯示在程式碼中,並提供相關的建議,幫助你更容易地找到和修復錯誤。
    https://ithelp.ithome.com.tw/upload/images/20230918/20141304Lzaj68tcx2.png
  • Tabnine - 本機端的 AI 助手,可以免費使用,不用擔心 Copilot 把程式碼傳上網或是收錢。
    https://ithelp.ithome.com.tw/upload/images/20230918/20141304dBdSn4dZmE.png

好啦,今天就先這樣,明天見啦!
/images/emoticon/emoticon13.gif


上一篇
[Day 02] - 從 Python 🐍 到 Rust 🦀|超級概覽,那 Mojo🔥呢?
下一篇
[Day 04] - 走到哪用到哪 🏃,Rust MLOps GitHub 模板與在容器中開發
系列文
Rust 加 MLOps,你說有沒有搞頭?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言